import { requestClient } from '#/api/request';

/**
 * 角色数据类型
 */
export interface Role {
  id: number;
  name: string;
  roleKey: string;
  status: number; // 0=正常，1=停用
  createdTime?: string;
  updateTime?: string;
}

/**
 * 角色列表查询参数
 */
export interface RoleListParams {
  pageNo: number;
  pageSize: number;
  name?: string;
  roleKey?: string;
  status?: number;
}

/**
 * 角色列表响应数据
 */
export interface RoleListResult {
  total: number;
  result: Role[];
  pageNo: number;
  pageSize: number;
}

/**
 * 角色创建/更新参数
 */
export interface RoleFormData {
  id?: number;
  name: string;
  roleKey: string;
  status: number;
}

/**
 * 角色状态修改参数
 */
export interface RoleStatusParams {
  id: number;
  status: number;
}

/**
 * 角色菜单权限分配参数
 */
export interface RoleMenuAssignParams {
  id: number;
  menuIds: number[];
}

/**
 * 角色权限关联参数（新接口）
 */
export interface RoleMenuAssociationParams {
  roleId: number;
  menuIds: number[];
}

/**
 * 获取角色列表（分页）
 */
export async function getRoleListApi(params: RoleListParams) {
  return requestClient.get<RoleListResult>('/role/list', { params });
}

/**
 * 获取所有角色（不分页）
 */
export async function getAllRolesApi() {
  return requestClient.get<Role[]>('/role/listAll');
}

/**
 * 获取角色详情
 */
export async function getRoleDetailApi(id: number) {
  return requestClient.get<Role>(`/role/${id}`);
}

/**
 * 创建角色
 */
export async function createRoleApi(data: RoleFormData) {
  return requestClient.post<Role>('/role', data);
}

/**
 * 更新角色
 */
export async function updateRoleApi(data: RoleFormData) {
  return requestClient.put<Role>('/role', data);
}

/**
 * 删除角色
 */
export async function deleteRoleApi(ids: string) {
  return requestClient.delete(`/role/${ids}`);
}

/**
 * 修改角色状态
 */
export async function changeRoleStatusApi(data: RoleStatusParams) {
  return requestClient.put('/role/changeStatus', data);
}

/**
 * 获取角色的菜单权限ID列表
 */
export async function getRoleMenuIdsApi(roleId: number) {
  return requestClient.get<number[]>(`/role/menuIds/${roleId}`);
}

/**
 * 为角色分配菜单权限
 */
export async function assignRoleMenuApi(data: RoleMenuAssignParams) {
  return requestClient.post('/role/assignMenu', data);
}

/**
 * 角色权限关联 - 给一个角色添加一个或多个权限
 */
export async function addRoleMenuPermissionsApi(data: RoleMenuAssociationParams) {
  return requestClient.post<string>('/roleMenu', data);
}
 